import axios from 'axios'
import { Message,MessageBox } from 'element-ui'
import store from '@/store'
import { getToken } from './auth'
import global from '../config/global'

// create an axios instance
const service = axios.create({
    baseURL: global.BASE_API, // api 的 base_url
    timeout: 300000 // request timeout
})

// request interceptor
service.interceptors.request.use(
        config => {
            // Do something before request is sent
            if (store.getters.token) {
                // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
                config.headers['token'] = getToken()
            }
            return config
        },
        error => {
            // Do something with request error
            console.log(error) // for debug
            Promise.reject(error)
        }
)

// response interceptor
service.interceptors.response.use(
        // response => response,
        /**
         * 下面的注释为通过在response里，自定义code来标示请求状态
         * 当code返回如下情况则说明权限有问题，登出并返回到登录页
         * 如想通过 xmlhttprequest 来状态码标识 逻辑可写在下面error中
         * 以下代码均为样例，请结合自生需求加以修改，若不需要，则可删除
         */
        response => {
            const res = response.data
            return res
        },
        error => {
          const resp = error.response;
          switch (resp.status) {
            case 401:
              MessageBox.confirm('你已被登出，可以取消继续留在该页面，或者重新登录', '确定登出', {
                confirmButtonText: '重新登录',
                cancelButtonText: '取消',
                type: 'warning'
              }).then(() => {
                store.dispatch('FedLogOut').then(() => {
                  this.$router.push("/login"); // 为了重新实例化vue-router对象 避免bug
                })
              });
              break;
            case 500:
              return resp.data
              break;
          }
        }
)

export default service
